package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"os/exec"
)

func main() {
	// a.json 就是模拟页面上面配置的该插件的stdin的内容
	bs, err := ioutil.ReadFile("a.json")
	if err != nil {
		log.Println("read a.json fail: ", err)
		os.Exit(1)
	}

	cmd := exec.Command("./callee", "--a=b", "--c=d")

	// collector把页面上配置的stdin传给插件脚本
	cmd.Stdin = bytes.NewReader(bs)

	// 页面支持配置环境变量，collector把页面上面配置的环境变量传给插件
	cmd.Env = append(cmd.Env, "N9E_ENDPOINT=127.0.0.1")

	// Dir 要设置到插件所在目录
	// cmd.Dir = ""

	// 插件的stdout被截获，当做监控数据上报给服务端
	var stdout bytes.Buffer
	cmd.Stdout = &stdout

	// 插件的stderr是错误输出
	var stderr bytes.Buffer
	cmd.Stderr = &stderr

	if err = cmd.Run(); err != nil {
		log.Println("cmd run fail: ", err)
		os.Exit(1)
	}

	stderrString := stderr.String()
	stdoutString := stdout.String()

	fmt.Println("-----stderr------")
	fmt.Println(stderrString)

	fmt.Println("-----stdout------")
	fmt.Println(stdoutString)
}
